/**
 * @description 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
 *      有效字符串需满足：
 *          左括号必须用相同类型的右括号闭合。
 *          左括号必须以正确的顺序闭合。
 * @param {string} s
 * @return {boolean}
 */

let s1 = '((()))'
let s2 = '(((}))'
let s3 = '({()})'
let s4 = '('

var isValid = function(s) {
    let stack= []
    let len = s.length
    for(let i = 0; i<len; ++i){
        if(s[i] == '(' || s[i] == '[' || s[i] == '{'){
            stack.push(s[i]);
        }else if(s[i] == ')' || s[i] == ']' || s[i] == '}'){
            const top = stack.pop()
            switch (s[i]) {
                case ')':
                    if(top === '(') break;
                    return false;
                case ']':
                    if(top === '[') break;
                    return false;
                case '}':
                    if(top === '{') break;
                    return false;
            }
        }
    }
    if(stack.length) return false;
    return true;
};

console.log(isValid(s1));
console.log(isValid(s2));
console.log(isValid(s3));
console.log(isValid(s4));

